#ifndef TILE_HPP_INCLUDED
#define TILE_HPP_INCLUDED

#include <vector>

#include "GameObject.hpp"

typedef std::vector<Item*> ItemVector;

class Item;
class Zone;

class Tile
{
public:
	Tile(Vector2d position, Zone* zone);
	virtual ~Tile();

	virtual bool hasSeen();
	virtual bool isPassable(int size);

	virtual const ItemVector& getItems() const;
	
	virtual void addItem(Item* item);
	virtual void setSeen(bool seen);
	virtual void update();

protected:
	bool Seen;

	ItemVector Items;

	Zone* Area;
};

//class BurnableTile: public Tile
//{
//public:
//	BurnableTile(std::string name, char shape, Vector2d position, Zone* zone, 
//		bool passable = false, bool transparent = false, int burntimer = 100, int flammability = 1, int spreads = 1,
//		TCODColor fore = TCODColor::white, TCODColor back = TCODColor::black);
//	virtual ~BurnableTile();
//	
//	virtual bool doneBurning();
//	virtual bool isBurning();
//	
//	virtual int getFlammability();
//	
//	virtual void light();
//	virtual void onBurn(); // flame burns
//	virtual void onDoneBurning(); // flame is gone
//	virtual void onExtinguish(); // flame is put out
//	virtual void update();
//
//protected:
//	bool DoneBurning, DoneBurningCall, HasSpread, IsBurning;
//	
//	// Flammability is how many in-game ticks it 
//	//   will take for fire to spread to this object
//	int BurnTimer, BurnTimerNow, Flammability, Spreads;
//};
//
//class OpenableTile: public Tile
//{
//public:
//	OpenableTile(char shape, Vector2d position, Zone* zone);
//	virtual ~OpenableTile();
//
//	virtual bool isOpen();
//
//	virtual void onClose() = 0;
//	virtual void onOpen() = 0;
//
//	virtual void toggle();
//
//protected:
//	bool Opened;
//};

#endif
